: ; EPROM 683 PER BOOT DEL SONE ; ; Thursday, 23 of November 2006 at 07:59 PM ; .org 0f000h jp lf061 jp lf209 jp lf233 jp lf202 jp lf1f8 jp lf1f2 jp lf56f jp lf572 jp lf752 jp lf6b4 jp lf562 jp lf0cc jp lf55d jp lf344 jp lf4e5 .byte 30h, 00h, 00h, 00h, 01h, 00h, 10h, 00h, 01h lf036: .byte 0Ch, 0Dh, 0Ah, 13h, 4Ch .byte " NEW FIRMWARE Vers. H " .byte "rev 4.8 " lf05b: inc de ld b,b lf05d: rlca dec c ld a,(bc) inc h lf061: xor a ; INIZIO PROGRAMMA out (0d6h),a ; spegne il motore del floppy ld sp,1000h ; imposta lo stack pointer ld hl,0040h ; azzera le locazioni da 0040h a 004fh ld b,10h lf06c: ld (hl),a inc hl djnz lf06c ld ix,1500h call lf4e5 ; inizializza la scheda video grafica ld de,lf036 ; visualizza il messaggio "NEW FIRMWARE" sul video call lf562 in a,(0b9h) and 0e0h jr nz,lf0b4 ; (+31h) out (0b9h),a ld de,0f123h lf088: call lf55a lf08b: call lf202 jr z,lf0a9 ; (+19h) call lf209 res 5,a cp 46h jr nz,lf08b ; (-0eh) ld de,0f15eh call lf55a lf09f: call lf792 jr nz,lf09f ; (-05h) call lf752 jr lf0c0 ; (+17h) lf0a9: call lf792 jr nz,lf08b ; (-23h) call lf752 xor a jr lf0cf ; (+1bh) lf0b4: ld b,04h lf0b6: ld de,8000h lf0b9: dec de ld a,e or d jr nz,lf0b9 ; (-05h) djnz lf0b6 ; (-0ah) lf0c0: ld a,02h out (0d6h),a xor a lf0c5: out (0d0h),a call lf641 jr lf113 ; (+47h) lf0cc: or a jr nz,lf113 ; (+44h) lf0cf: push af ld hl,0f02eh call lf6b4 lf0d6: or a jr nz,lf0fa ; (+21h) ld hl,1006h ld a,(hl) cp 49h jr nz,lf0f5 ; (+14h) inc hl ld a,(hl) cp 50h jr nz,lf0f5 ; (+0eh) inc hl ld a,(hl) cp 4ch jr nz,lf0f5 ; (+08h) pop af or a jp z,1000h jp 1003h lf0f5: ld de,0f1a9h jr lf0fd ; (+03h) lf0fa: ld de,0f19ah lf0fd: call lf562 pop af ld de,0f1bdh call lf562 lf107: call lf209 cp 0dh jr nz,lf107 ; (-07h) ld c,07h call lf233 lf113: ld a,01h out (0d6h),a push af call lf619 ld hl,0f02eh call lf572 jr lf0d6 ; (-4dh) lf123: .byte "Push [F] for boot from floppy " .byte "disk or wait hard disk ready", 24h, 07h .byte "Ok for boot from floppy disk. " .byte "Wait until hard disk ready. " .byte 24h, 0Dh, 0Ah, 13h .byte "HDISK ERROR", 24h, 0Dh, 0Ah, 13h .byte "HNo IPL on disk.", 24h, 0Dh, 0Ah .byte "Set system diskette in disk A," .byte 0Dh, 0Ah .byte "and push return", 13h lf1ef: ld b,b rlca lf1f1: inc h lf1f2: in a,(89h) and 01h dec a ret lf1f8: in a,(89h) lf1fa: bit 0,a jr nz,lf1f8 ; (-06h) ld a,c out (81h),a ret lf202: in a,(85h) and 80h rlca dec a ret lf209: ld ix,(0047h) in a,(85h) bit 7,a jr nz,lf209 ; (-0ah) push af lf214: in a,(85h) bit 7,a jr z,lf214 ; (-06h) pop af xor 7fh lf21d: bit 5,(ix+04h) jr nz,lf225 ; (+02h) out (8fh),a lf225: bit 6,(ix+04h) ret nz cp 61h ret c cp 7bh lf22f: ret nc res 5,a ret lf233: ld ix,(0047h) lf237: ld l,(ix+00h) ld h,(ix+01h) lf23d: ld a,(ix+05h) or a jr nz,lf263 ; (+20h) ld a,c cp 20h jp c,lf364 call lf3f2 inc hl lf24d: call lf418 jr c,lf259 ; (+07h) ld de,0ffb0h add hl,de call lf460 lf259: ld (ix+00h),l ld (ix+01h),h call lf43b ret lf263: ld iy,0f278h add a,a ld e,a ld d,00h add iy,de ld de,lf35f push de ld e,(iy+00h) ld d,(iy+01h) push de ld a,c ret adc a,(hl) jp p,lf421 sbc a,a jp p,lf2ad ret jp p,lf2dd rla di push af jp p,lf324 cp e jp p,40d6h cp 10h ret nc cpl ld b,a ld a,(ix+04h) or 1fh and b ld (ix+04h),a ret bit 0,a jr nz,lf2a8 ; (+05h) set 7,(ix+04h) ret lf2a8: res 7,(ix+04h) ret lf2ad: bit 0,a jr nz,lf2b6 ; (+05h) set 6,(ix+04h) ret lf2b6: res 6,(ix+04h) ret bit 0,a jr nz,lf2c4 ; (+05h) set 5,(ix+04h) ret lf2c4: res 5,(ix+04h) ret pop de cp 2bh jr nz,lf2d3 ; (+05h) ld (ix+05h),06h ret lf2d3: cp 3dh jp nz,lf35f ld (ix+05h),07h ret lf2dd: call lf307 jr nz,lf2e5 ; (+03h) add a,h jr lf2e8 ; (+03h) lf2e5: sub h neg lf2e8: ld b,18h call lf359 ld (ix+06h),a ld a,08h jp lf3c9 call lf307 jr nz,lf2fd ; (+03h) add a,l jr lf300 ; (+03h) lf2fd: sub l neg lf300: ld b,50h call lf359 jr lf329 ; (+22h) lf307: sub 20h push af ld bc,0050h call lf4dc ld h,a pop af bit 7,a res 7,a ret ld b,18h call lf357 ld (ix+06h),a ld a,09h jp lf3c9 lf324: ld b,50h call lf357 lf329: ld l,(ix+06h) lf32c: ld h,00h add hl,hl add hl,hl add hl,hl add hl,hl push hl add hl,hl add hl,hl pop de add hl,de ld e,a ld d,00h add hl,de ld (ix+07h),l ld (ix+08h),h jp lf259 lf344: ld ix,(0047h) ld a,h ld b,18h call lf359 ld a,l ld b,50h call lf359 ld l,h jr lf32c ; (-2bh) lf357: sub 20h lf359: cp b ret c out (8fh),a pop de ret lf35f: ld (ix+05h),00h ret lf364: cp 04h ret c cp 1ch ret nc ld de,lf259 push de ld iy,0f37bh add a,a ld e,a ld d,00h add iy,de ld e,(iy+00h) ld d,(iy+01h) push de ld de,0050h ret jp nc,93f3h call p,lf4a0 adc a,0f3h jp (hl) di call z,0d9f3h di sbc a,0f3h sbc a,l call p,lf4cc jp po,0ecf3h di call z,0ccf3h di call z,0b3f3h di or a di cp e di cp a di jp 0ccf3h di call z,0ccf3h di rst 00h di ld a,01h jr lf3c9 ; (+12h) ld a,02h jr lf3c9 ; (+0eh) ld a,03h jr lf3c9 ; (+0ah) ld a,04h jr lf3c9 ; (+06h) ld a,0ah jr lf3c9 ; (+02h) ld a,05h lf3c9: ld (ix+05h),a lf3cc: pop de ret out (8fh),a jr lf3cc ; (-06h) ld l,(ix+07h) ld h,(ix+08h) ret add hl,de pop de jp lf24d ld hl,0000h ret inc hl call lf418 ret c dec hl ret ld de,0001h xor a sbc hl,de ret nc add hl,de ret lf3f2: push de push hl push af call lf43b pop af call lf3ff pop hl pop de ret lf3ff: push af lf400: in a,(8ch) bit 7,a jr z,lf400 ; (-06h) ex (sp),hl ex (sp),hl ld a,(ix+04h) or 0f0h out (8eh),a pop af push af out (80h),a xor a out (8dh),a pop af ret lf418: push hl ld de,0780h xor a sbc hl,de pop hl ret lf421: bit 0,a jr nz,lf433 ; (+0eh) ld b,20h lf427: ld a,0ah out (8ch),a ld a,b out (8dh),a lf42e: ld a,1fh out (8ch),a ret lf433: ld a,0ah out (8ch),a ld b,00h jr lf427 ; (-14h) lf43b: ld e,(ix+02h) ld d,(ix+03h) add hl,de ld a,0eh out (8ch),a ld a,h out (8dh),a ld a,0fh out (8ch),a ld a,l out (8dh),a lf450: ld a,12h out (8ch),a ld a,h out (8dh),a ld a,13h out (8ch),a ld a,l out (8dh),a jr lf42e ; (-32h) lf460: bit 7,(ix+04h) jr z,lf48c ; (+26h) push hl ld l,(ix+02h) ld h,(ix+03h) ld de,0050h add hl,de res 3,h ld (ix+02h),l ld (ix+03h),h ld a,0ch out (8ch),a ld a,h out (8dh),a ld a,0dh out (8ch),a ld a,l out (8dh),a ld hl,0780h jr lf4aa ; (+1eh) lf48c: ld bc,0050h call lf4dc ret push hl call lf4cc add hl,de ex de,hl pop hl push hl jr lf4a4 ; (+07h) ld hl,0000h lf4a0: push hl ld de,07d0h lf4a4: di xor a ex de,hl sbc hl,de ex de,hl lf4aa: push de call lf43b pop de lf4af: ld a,d or e jr z,lf4c9 ; (+16h) lf4b3: in a,(8ch) bit 7,a jr z,lf4b3 ; (-06h) ex (sp),hl ex (sp),hl ld a,20h out (80h),a ld a,0ffh out (8eh),a xor a out (8dh),a dec de jr lf4af ; (-1ah) lf4c9: pop hl ei ret lf4cc: push bc ld b,d ld c,e call lf4dc ld l,00h ld d,b ld e,c pop bc lf4d7: ret z add hl,de dec a jr lf4d7 ; (-05h) lf4dc: xor a lf4dd: sbc hl,bc inc a jr nc,lf4dd ; (-05h) dec a add hl,bc ret lf4e5: ld (0047h),ix ; subroutine inizializzazione scheda video grafica ld a,8fh out (82h),a out (86h),a out (8ah),a ld a,0cfh out (83h),a ex af,af' ld a,00h out (83h),a ex af,af' out (87h),a ex af,af' ld a,0ffh out (87h),a ex af,af' out (8bh),a ld a,0f1h out (8bh),a in a,(89h) res 1,a out (89h),a ld hl,0f53dh ld b,0ch lf514: ld a,b dec a out (8ch),a ld a,(hl) out (8dh),a inc hl djnz lf514 ; (-0ah) ld b,08h lf520: ld a,b add a,0bh out (8ch),a xor a out (8dh),a djnz lf520 ; (-0ah) ld a,1fh out (8ch),a xor a ld hl,(0047h) ld b,10h lf534: ld (hl),a inc hl djnz lf534 ; (-04h) dec a ld (ix+04h),a ret lf53d: .byte 0Bh, 00h, 0Bh, 48h, 18h, 18h .byte 00h, 1Ah, 28h, 57h, 50h, 6fh ld a,0eh out (8ch),a in a,(8dh) ld h,a ld a,0fh out (8ch),a in a,(8dh) ld l,a jp lf450 lf55a: ld hl,0c0ch lf55d: push de call lf344 pop de lf562: ld a,(de) ; subroutine visualizzazione messaggio a video cp 24h ret z ld c,a push de call lf233 pop de inc de jr lf562 ; (-0dh) lf56f: xor a jr lf573 ; (+01h) lf572: scf lf573: ld ix,(0047h) set 0,(ix+09h) jr c,lf581 ; (+04h) res 0,(ix+09h) lf581: ld a,(hl) ld d,a and 03h call lf661 inc hl ld (0045h),hl ld c,02h lf58e: ld b,03h lf590: push bc ld hl,(0045h) ld b,(hl) inc hl inc hl ld a,(hl) out (0d2h),a ld a,b out (0d7h),a ld a,16h out (0d0h),a call lf623 or a jr nz,lf5fb ; (+54h) inc hl ld e,(hl) inc hl ld d,(hl) inc hl bit 0,(ix+09h) ld a,80h jr z,lf5b5 ; (+01h) xor a lf5b5: ld b,a ld c,0d7h ld a,(hl) ex de,hl or a jr nz,lf5d5 ; (+18h) ld a,88h out (0d0h),a call lf63c jr lf5c9 ; (+03h) lf5c6: rrca jr nc,lf5eb ; (+22h) lf5c9: in a,(0d0h) bit 1,a jr z,lf5c6 ; (-09h) ini jr nz,lf5c9 ; (-0ah) jr lf5eb ; (+16h) lf5d5: ld a,0a8h out (0d0h),a call lf63c jr lf5e1 ; (+03h) lf5de: rrca jr nc,lf5eb ; (+0ah) lf5e1: in a,(0d0h) bit 1,a jr z,lf5de ; (-09h) outi jr nz,lf5e1 ; (-0ah) lf5eb: ld h,b call lf633 or a jr nz,lf5fb ; (+09h) or h ld a,02h jr nz,lf5fb ; (+04h) xor a pop bc jr lf613 ; (+18h) lf5fb: pop bc push af and 03h jr nz,lf614 ; (+13h) pop af dec b jr nz,lf590 ; (-75h) dec c jr z,lf613 ; (+0bh) push af call lf619 or a jr nz,lf614 ; (+05h) pop af jp lf58e lf613: push af lf614: xor a out (0d6h),a pop af ret lf619: push bc ld a,06h out (0d0h),a call lf641 pop bc ret lf623: call lf641 or a ret nz ld a,b and 10h sla a ld c,a ld a,b and 08h or c ret lf633: call lf641 or a ret nz ld a,b and 5ch ret lf63c: ex (sp),hl ex (sp),hl ex (sp),hl ex (sp),hl ret lf641: call lf63c ld b,02h lf646: ld de,0000h lf649: in a,(0d0h) bit 0,a jr z,lf65e ; (+0fh) dec de ld a,d or e jr nz,lf649 ; (-0bh) dec b jr nz,lf646 ; (-11h) ld a,0d0h out (0d0h),a ld a,01h ret lf65e: ld b,a xor a ret lf661: push hl ld c,a ld b,00h ld hl,0f68ah add hl,bc ld e,(hl) ld a,d and 10h sla a or e out (0d6h),a ld hl,0044h ld a,(hl) cp c jr z,lf688 ; (+0fh) ld (hl),c ld hl,0040h push hl add a,l ld l,a in a,(0d1h) ld (hl),a pop hl add hl,bc ld a,(hl) out (0d1h),a lf688: pop hl ret ld bc,0402h ex af,af' ld bc,0468h nop add a,b nop ld b,b dec bc lf696: .byte 0Dh, 0Ah, "HardDisk Parameter overflow", 24h lf6b4: in a,(0b9h) and 0e0h ret nz ld (0045h),hl ld a,(hl) ld b,a and 30h srl a srl a srl a srl a cp 02h jp nc,lf732 bit 0,b jr z,lf6d3 ; (+02h) add a,02h lf6d3: ld c,a inc hl ld e,(hl) inc hl ld d,(hl) inc hl push hl and a ld hl,0167h sbc hl,de jr c,lf731 ; (+4fh) ld hl,0000h ld b,h add hl,de add hl,de add hl,de add hl,de add hl,bc add hl,hl add hl,hl add hl,hl add hl,hl add hl,hl ex de,hl pop hl lf6f2: ld a,(hl) dec a cp 20h jr nc,lf732 ; (+3ah) ld c,a ex de,hl add hl,bc ld a,h ld h,l ld l,a ld (004ch),hl ex de,hl inc hl ld e,(hl) inc hl ld d,(hl) push de inc hl ld a,(hl) push af inc hl ld a,(hl) ld (004eh),a ld e,a pop af pop hl ld bc,00b8h or a jr nz,lf73b ; (+23h) call lf77f lf71b: ld a,08h call lf79e lf720: call lf7de ret nz and 08h jr nz,lf72d ; (+05h) inir dec e jr nz,lf720 ; (-0dh) lf72d: call lf7b2 ret lf731: pop hl lf732: ld de,0f696h call lf562 ld a,40h ret lf73b: call lf77f ld a,0ah call lf79e lf743: call lf7de ret nz and 08h jr nz,lf72d ; (-1eh) otir dec e jr nz,lf743 ; (-0dh) jr lf72d ; (-25h) lf752: out (0b9h),a call lf792 ret nz call lf77f ld a,0ch call lf79e ld hl,0f68eh ld b,08h call lf7de ret nz lf769: ld a,(hl) out (0b8h),a inc hl djnz lf769 ; (-06h) call lf7b2 ret nz call lf77f ld a,01h call lf79e call lf7b2 ret lf77f: in a,(0b9h) and 02h jr nz,lf77f ; (-06h) ld a,01h out (0b8h),a out (0bah),a lf78b: in a,(0b9h) and 02h jr z,lf78b ; (-06h) ret lf792: call lf77f ld a,00h call lf79e call lf7b2 ret lf79e: push hl ld hl,004ah ld (hl),a ld d,06h call lf7de ret nz lf7a9: ld a,(hl) out (0b8h),a inc hl dec d jr nz,lf7a9 ; (-07h) pop hl ret lf7b2: call lf7de ret nz in a,(0b8h) ld d,a call lf7de ret nz in a,(0b8h) ld a,d and 02h ret z call lf77f ld a,03h call lf79e call lf7de ret nz in a,(0b8h) ld e,a in a,(0b8h) in a,(0b8h) in a,(0b8h) call lf7b2 ld a,e or a ret lf7de: push bc push de ld b,08h lf7e2: ld de,0000h lf7e5: in a,(0b9h) ld c,a and 01h jr nz,lf7f5 ; (+09h) dec de ld a,d or e jr nz,lf7e5 ; (-0ch) djnz lf7e2 ; (-11h) ld c,0ffh lf7f5: dec a ld a,c pop de pop bc ret rst 30h call lf7b2 ret .byte 0dbh .org 0f7ffh .end